package org.jeecg.modules.rule.controller;

import java.io.UnsupportedEncodingException;
import java.io.IOException;
import java.net.URLDecoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.hutool.json.JSONUtil;
import com.alibaba.druid.sql.visitor.functions.If;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.meta.entity.SysFieldinfo;
import org.jeecg.modules.meta.entity.SysTableinfo;
import org.jeecg.modules.meta.service.ISysFieldinfoService;
import org.jeecg.modules.meta.service.ISysTableinfoService;
import org.jeecg.modules.rule.entity.OpersscAr;
import org.jeecg.modules.rule.entity.OpersscFiddetail;
import org.jeecg.modules.rule.service.IOpersscArService;
import org.jeecg.modules.rule.service.IOpersscFiddetailService;
import org.jeecg.modules.rule.vo.OpersscDetailAddVO;
import org.jeecg.modules.run.entity.RunDetail;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;

import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.rule.entity.OpersscTabdetail;
import org.jeecg.modules.rule.entity.OpersscTp;
import org.jeecg.modules.rule.vo.OpersscTpPage;
import org.jeecg.modules.rule.service.IOpersscTpService;
import org.jeecg.modules.rule.service.IOpersscTabdetailService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import com.alibaba.fastjson.JSON;

 /**
 * @Description: 手工脱敏表
 * @Author: jeecg-boot
 * @Date:   2019-06-17
 * @Version: V1.0
 */
@RestController
@RequestMapping("/rule/opersscTp")
@Slf4j
public class OpersscTpController {
	@Autowired
	private IOpersscTpService opersscTpService;
	@Autowired
	private IOpersscTabdetailService opersscTabdetailService;
	@Autowired
    private IOpersscFiddetailService opersscFiddetailService;
     @Autowired
     ISysTableinfoService iSysTableinfoService;
     @Autowired
     private IOpersscArService opersscArService;


	/**
	  * 分页列表查询
	 * @param opersscTp
	 * @param pageNo
	 * @param pageSize
	 * @param req
	 * @return
	 */
	@GetMapping(value = "/list")
	public Result<IPage<OpersscTp>> queryPageList(OpersscTp opersscTp,
									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
									  HttpServletRequest req) {
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
		Result<IPage<OpersscTp>> result = new Result<IPage<OpersscTp>>();
		QueryWrapper<OpersscTp> queryWrapper = QueryGenerator.initQueryWrapper(opersscTp, req.getParameterMap());
		queryWrapper.in("fd_apply_user",sysUser.getId());
		Page<OpersscTp> page = new Page<OpersscTp>(pageNo, pageSize);
		IPage<OpersscTp> pageList = opersscTpService.page(page, queryWrapper);
		result.setSuccess(true);
		result.setResult(pageList);
		return result;
	}

	/**
	  *   添加
	 * @param opersscTpPage
	 * @return
	 */
	@PostMapping(value = "/add")
	public Result<OpersscTp> add(@RequestBody OpersscTpPage opersscTpPage) {
		Result<OpersscTp> result = new Result<OpersscTp>();

		try {
			OpersscTp opersscTp = new OpersscTp();
			BeanUtils.copyProperties(opersscTpPage, opersscTp);
            LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
            opersscTp.setFdApplyUser(sysUser.getId());
            //设置创建日期
            Date parseDate = OpersscTpController.setCreateTime();
            opersscTp.setCreateTime(parseDate);
			opersscTpService.save(opersscTp);
			//历史记录
           OpersscAr opersscAr = this.setOpersscAr(opersscTp);
            opersscAr.setFdStatus("1");
            opersscArService.save(opersscAr);

            result.success("添加成功！");
		} catch (Exception e) {
			log.error(e.getMessage(),e);
			result.error500("操作失败");
		}
		return result;
	}

     /**
      * 创建日期
      * @param opersscTp
      * @return
      */
     public  static Date setCreateTime() {
       Date  parseDate = null;
         try {
             Date date = new Date();
             SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             String formatDate = simpleDateFormat.format(date);
             parseDate = simpleDateFormat.parse(formatDate );

         } catch (ParseException e) {
             e.printStackTrace();
         }
         return  parseDate;
     }
	public static OpersscAr setOpersscAr(OpersscTp opersscTp){
        OpersscAr opersscAr = new OpersscAr();
        opersscAr.setId(opersscTp.getId());
        opersscAr.setFdName(opersscTp.getFdName());
        opersscAr.setFdExpain(opersscTp.getFdExpain());
        opersscAr.setFdDes(opersscTp.getFdDes());
        opersscAr.setFdProject(opersscTp.getFdProject());
        opersscAr.setFdRunDate(opersscTp.getFdRunDate());
        opersscAr.setFdRunEndDate(opersscTp.getFdRunEndDate());
        opersscAr.setFdStatus(opersscTp.getFdStatus());
        opersscAr.setFdSource(opersscTp.getFdSource());
        opersscAr.setFdRelease(opersscTp.getFdRelease());
        opersscAr.setFdApplyUser(opersscTp.getFdApplyUser());
        opersscAr.setFdApplyTime(opersscTp.getFdApplyTime());
        opersscAr.setFdApplyCast(opersscTp.getFdApplyCast());
        opersscAr.setFdCheckUser2(opersscTp.getFdCheckUser2());
        opersscAr.setFdCheckTime2(opersscTp.getFdCheckTime2());
        opersscAr.setFdCheckCast2(opersscTp.getFdCheckCast2());
        opersscAr.setCreateUser(opersscTp.getCreateUser());
        opersscAr.setCreateTime(opersscTp.getCreateTime());
        opersscAr.setUpdateTime(opersscTp.getUpdateTime());
        opersscAr.setUpdateUser(opersscTp.getUpdateUser());
        opersscAr.setIsDelete(opersscTp.getIsDelete());
        return opersscAr;
    }
     /**
      * 通过fdTableId查询t_dex_operssc_flddetail字段信息
      *
      * @param fdTableId
      * @return
      */
     @GetMapping(value = "/showOpersscFiddetail")
     public Result<IPage<OpersscFiddetail>> showFieldinfo(String fdTableId,
                                                          String fdSscid,
                                                          @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                                          @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                          HttpServletRequest req) {

         Result<IPage<OpersscFiddetail>> result = new Result<IPage<OpersscFiddetail>>();
         OpersscFiddetail opersscFiddetail = new OpersscFiddetail();
         opersscFiddetail.setFdTableId(fdTableId);
         QueryWrapper<OpersscFiddetail> queryWrapper = QueryGenerator.initQueryWrapper(opersscFiddetail, req.getParameterMap());
         queryWrapper.in("fd_sscid", fdSscid);
         Page<OpersscFiddetail> page = new Page<OpersscFiddetail>(pageNo, pageSize);
         IPage<OpersscFiddetail> pageList = opersscFiddetailService.page(page, queryWrapper);
         result.setSuccess(true);
         result.setResult(pageList);
         return result;
     }
	/**
	  *  编辑
	 * @param opersscTpPage
	 * @return
	 */
	@PutMapping(value = "/edit")
	public Result<OpersscTp> edit(@RequestBody OpersscTpPage opersscTpPage) {
		Result<OpersscTp> result = new Result<OpersscTp>();
		OpersscTp opersscTp = new OpersscTp();
		BeanUtils.copyProperties(opersscTpPage, opersscTp);
		OpersscTp opersscTpEntity = opersscTpService.getById(opersscTp.getId());
		if(opersscTpEntity==null) {
			result.error500("未找到对应实体");
		}else {
			opersscTpService.updateById(opersscTp);
            //历史记录
            OpersscAr opersscAr = OpersscTpController.setOpersscAr(opersscTp);
            opersscAr.setFdStatus(opersscTp.getFdStatus());
            //设置创建时间
            Date date = OpersscTpController.setCreateTime();
            opersscAr.setCreateTime(date);
            opersscArService.save(opersscAr);
			result.success("修改成功!");
		}

		return result;
	}

	/**
	  *   通过id删除
	 * @param id
	 * @return
	 */
	@DeleteMapping(value = "/delete")
	public Result<OpersscTp> delete(@RequestParam(name="id",required=true) String id,
                                    HttpServletRequest req) {
		Result<OpersscTp> result = new Result<OpersscTp>();
		OpersscTp opersscTp = opersscTpService.getById(id);
        OpersscFiddetail opersscFiddetail = new OpersscFiddetail();
        opersscFiddetail.setFdSscid(id);

        if(opersscTp==null) {
			result.error500("未找到对应实体");
		}else {
            //保存历史记录
            OpersscAr opersscAr = OpersscTpController.setOpersscAr(opersscTp);
            opersscAr.setFdStatus("5");
            //设置创建时间
            Date date = OpersscTpController.setCreateTime();
            opersscAr.setCreateTime(date);
            opersscArService.save(opersscAr);
            //删除
			opersscTpService.delMain(id);
			//删除OpersscFiddetail表
            QueryWrapper< OpersscFiddetail> queryWrapper = QueryGenerator.initQueryWrapper(opersscFiddetail, req.getParameterMap());
            iOpersscFiddetailService.remove(queryWrapper);
			result.success("删除成功!");
		}

		return result;
	}

	/**
	  *  批量删除
	 * @param ids
	 * @return
	 */
	@DeleteMapping(value = "/deleteBatch")
	public Result<OpersscTp> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
		Result<OpersscTp> result = new Result<OpersscTp>();
		if(ids==null || "".equals(ids.trim())) {
			result.error500("参数不识别！");
		}else {
			this.opersscTpService.removeByIds(Arrays.asList(ids.split(",")));
			result.success("删除成功!");
		}
		return result;
	}

	/**
	  * 通过id查询
	 * @param id
	 * @return
	 */
	@GetMapping(value = "/queryById")
	public Result<OpersscTp> queryById(@RequestParam(name="id",required=true) String id) {
		Result<OpersscTp> result = new Result<OpersscTp>();
		OpersscTp opersscTp = opersscTpService.getById(id);
		if(opersscTp==null) {
			result.error500("未找到对应实体");
		}else {
			result.setResult(opersscTp);
			result.setSuccess(true);
		}
		return result;
	}

	//===========================以下是子表信息操作相关API====================================

	/**
	  * 通过主表id查询手工脱敏运行详情表
	 * @param mainId
	 * @return
	 */
	@GetMapping(value = "/listOpersscTabdetailByMainId")
	public Result<IPage<OpersscTabdetail>> queryOpersscTabdetailListByMainId(OpersscTabdetail opersscTabdetail,
                                                                            @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                                                            @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                                             @RequestParam(name = "fdTableName", required = false) String fdTableName,
                                                                            HttpServletRequest req) {
        Result<IPage<OpersscTabdetail>> result = new Result<>();
	    if (opersscTabdetail.getFdSscid() != null) {
            QueryWrapper<OpersscTabdetail> queryWrapper = QueryGenerator.initQueryWrapper(opersscTabdetail, req.getParameterMap());
            if (StringUtils.isNotEmpty(fdTableName)) {
                List<String> tabIdList = getTabIdListByName(fdTableName);
                if (tabIdList == null || tabIdList.size() == 0) {
                    return null;
                }
                queryWrapper.in("fd_table_id", tabIdList);
            }
            Page<OpersscTabdetail> page = new Page<>(pageNo, pageSize);
            IPage<OpersscTabdetail> pageList = opersscTabdetailService.page(page, queryWrapper);
            result.setSuccess(true);
            result.setResult(pageList);
            return result;
        }else {
	        return null;
        }
    }
     private List<String> getTabIdListByName(String tableName) {
         QueryWrapper<SysTableinfo> queryWrapper = new QueryWrapper<>();
         queryWrapper.like("fd_tablename", tableName);
         List<SysTableinfo> list = iSysTableinfoService.list(queryWrapper);
         if (null == list || list.size() == 0) {
             return new ArrayList<>();
         }

         return covTableInfoString(list);
     }


     private List<String> covTableInfoString(List<SysTableinfo> list) {
         List<String> strings = new ArrayList<>();
         for (SysTableinfo sysTableinfo : list) {
             strings.add(sysTableinfo.getFdTableid());
         }
         return strings;
     }
     /**
      * 查询t_sys_tableinfo表
      *
      * @return
      */
     @GetMapping(value = "/listSysTableinfo")
     public Result<IPage<SysTableinfo>> queryPageListTableinfo(SysTableinfo tableinfo,
                                                               OpersscTabdetail detail,
                                                               @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                                               @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                               HttpServletRequest req) {
         Result<IPage<SysTableinfo>> result = new Result<IPage<SysTableinfo>>();
         QueryWrapper<SysTableinfo> queryWrapper = QueryGenerator.initQueryWrapper(tableinfo, req.getParameterMap());
         queryWrapper.notIn("fd_status","2");
         Page<SysTableinfo> page = new Page<SysTableinfo>(pageNo, pageSize);
         IPage<SysTableinfo> pageList = iSysTableinfoService.page(page, queryWrapper);
         result.setSuccess(true);
         result.setResult(pageList);
         return result;
     }
     /**
      * 添加自动脱敏详情表
      *
      * @param autosscDetail
      * @return
      */
     @PostMapping(value = "/addAutosscDetail")
     public Result<OpersscTabdetail> addAutosscDetail(@RequestBody OpersscDetailAddVO opersscDetailAddVO,
                                                   HttpServletRequest req) {
         Result<OpersscTabdetail> result = new Result<>();
         boolean ok = true;
         try {
             if (opersscDetailAddVO.getFdTableId() != null && opersscDetailAddVO.getFdTableId().size() > 0) {

                 for (SysTableinfo sysTableinfo : opersscDetailAddVO.getFdTableId()) {
                     OpersscTabdetail autosscDetail = new OpersscTabdetail();
                     //save
                     autosscDetail.setFdSscid(opersscDetailAddVO.getFdSscid());
                     autosscDetail.setFdTableId(sysTableinfo.getFdTableid());
                     autosscDetail.setFdStatus("1");
                     autosscDetail.setFdDes("1");
                     autosscDetail.setFdRelease("1");
                     //是否存在
                     OpersscTabdetail autosscDetailOld = this.queryWrapper("fd_sscid", opersscDetailAddVO.getFdSscid(), "fd_table_id", sysTableinfo.getFdTableid());
                     if (null != autosscDetailOld) {
                         continue;
                     }
                     ok = opersscTabdetailService.save(autosscDetail);
                     if (ok){
                         this.addOpersscFlddetail(autosscDetail,req);
                     }

                 }
             }
             if (ok) {
                 result.setSuccess(true);
                 result.setMessage("添加自动脱敏详情表成功.");
             } else {
                 result.setSuccess(false);
                 result.setMessage("添加自动脱敏详情表失败!");
             }
             return result;
         } catch (Exception e) {
             e.printStackTrace();
             result.setSuccess(false);
             result.setMessage("添加自动脱敏详情表过程中出现了异常");
             return result;
         }

     }
     //queryWrapper函数
     private  OpersscTabdetail queryWrapper(String column,String name,String colum2,String name2){
         QueryWrapper queryWrapper = new QueryWrapper();
         queryWrapper.eq(column+"",name);
         queryWrapper.eq(colum2+"",name2);
         OpersscTabdetail opersscTabdetail =  opersscTabdetailService.getOne(queryWrapper);
         return opersscTabdetail;
     }
     @Autowired
     ISysFieldinfoService iSysFieldinfoService;

     @Autowired
     IOpersscFiddetailService iOpersscFiddetailService;
     //将t_sys_fieldinfo数据插入t_dex_operssc_flddetail表
     private boolean addOpersscFlddetail(OpersscTabdetail autosscDetail,HttpServletRequest req){

         boolean ok = false;

             SysFieldinfo fieldinfo = new SysFieldinfo();
             fieldinfo.setFdTableid(autosscDetail.getFdTableId());
             QueryWrapper<SysFieldinfo> queryWrapper = QueryGenerator.initQueryWrapper(fieldinfo, req.getParameterMap());
             List<SysFieldinfo> list = iSysFieldinfoService.list(queryWrapper);
             //插入
             for (SysFieldinfo sysFieldinfo : list) {
                 //拼接
                 OpersscFiddetail opersscFiddetail = new OpersscFiddetail();
                 opersscFiddetail.setFdSscid(autosscDetail.getFdSscid());
                 opersscFiddetail.setFdTableId(sysFieldinfo.getFdTableid());
                 opersscFiddetail.setFdFieldid(sysFieldinfo.getFdFieldid());
                 opersscFiddetail.setFdFieldname(sysFieldinfo.getFdFieldname());
                 opersscFiddetail.setFdRulename(sysFieldinfo.getFdRulename());
                 opersscFiddetail.setFdRulelevel(sysFieldinfo.getFdRulelevel());
                 opersscFiddetail.setFdStatus("1");
                 opersscFiddetail.setFdDes("1");

                 ok = iOpersscFiddetailService.save(opersscFiddetail);
             }




         return ok;
     }

	/**
     * 添加手工脱敏运行详情表
     *
     * @param opersscTabdetail
     * @return
     */
    @PostMapping(value = "/addOpersscTabdetail")
    public Result<OpersscTabdetail> addOpersscTabdetail(@RequestBody OpersscTabdetail opersscTabdetail) {
        Result<OpersscTabdetail> result = new Result<>();
        try {
            boolean ok = opersscTabdetailService.save(opersscTabdetail);
            if (ok) {
                result.setSuccess(true);
                result.setMessage("添加手工脱敏运行详情表成功.");
            } else {
                result.setSuccess(false);
                result.setMessage("添加手工脱敏运行详情表失败!");
            }
            return result;
        } catch (Exception e) {
            e.fillInStackTrace();
            result.setSuccess(false);
            result.setMessage("添加手工脱敏运行详情表过程中出现了异常: " + e.getMessage());
            return result;
        }
    }
    
    /**
     * 编辑手工脱敏运行详情表
     *
     * @param opersscTabdetail
     * @return
     */
    @PutMapping("/editOpersscTabdetail")
    public Result<OpersscTabdetail> editOpersscTabdetail(@RequestBody OpersscTabdetail opersscTabdetail) {
        Result<OpersscTabdetail> result = new Result<>();
        try {
            boolean ok = opersscTabdetailService.updateById(opersscTabdetail);
            if (ok) {
                result.setSuccess(true);
                result.setMessage("更新手工脱敏运行详情表成功.");
            } else {
                result.setSuccess(false);
                result.setMessage("更新手工脱敏运行详情表失败!");
            }
            return result;
        } catch (Exception e) {
            result.setSuccess(false);
            result.setMessage("更新数据过程中出现异常啦: " + e.getMessage());
            return result;
        }
    }
     /**
      *  待提交修改
      * @param opersscTpPage
      * @return
      */
     @GetMapping(value = "/updateSscid")
     public Result<OpersscTp> updateToSubmitSscid(String ids,HttpServletRequest req) {
         OpersscTp opersscTp = new OpersscTp();
         opersscTp.setId(ids);
         Result<OpersscTp> result = new Result<OpersscTp>();
         if(opersscTp==null) {
             result.error500("未找到对应实体");
         }else {
             QueryWrapper<OpersscTp> queryWrapper = QueryGenerator.initQueryWrapper(opersscTp, req.getParameterMap());
             OpersscTp one = opersscTpService.getOne(queryWrapper);
             if (one.getFdStatus().equals("2")){
                 result.error500("已是待复核");
                 return result;
             }
             one.setFdStatus("2");
             opersscTpService.saveOrUpdate(one);
             //历史记录
             OpersscAr opersscAr = OpersscTpController.setOpersscAr(one);
             opersscAr.setFdStatus("2");
             //设置创建时间
             opersscAr.setCreateTime(OpersscTpController.setCreateTime());
             opersscArService.save(opersscAr);
             result.success("修改成功!");
         }

         return result;
     }
    /**
     * 通过id删除手工脱敏运行详情表
     *
     * @param id
     * @return
     */
    @DeleteMapping(value = "/deleteOpersscTabdetail")
    public Result<OpersscTabdetail> deleteOpersscTabdetail(@RequestParam(name = "id", required = true) String id,
                                                           String fdSscid,String fdTableId,
                                                           HttpServletRequest req) {

        Result<OpersscTabdetail> result = new Result<>();
        OpersscFiddetail opersscFiddetail = new OpersscFiddetail();
        opersscFiddetail.setFdSscid(fdSscid);
        opersscFiddetail.setFdTableId(fdTableId);
        QueryWrapper< OpersscFiddetail> queryWrapper = QueryGenerator.initQueryWrapper(opersscFiddetail, req.getParameterMap());

        try {
            boolean ok = opersscTabdetailService.removeById(id);
            iOpersscFiddetailService.remove(queryWrapper);
            if (ok) {
                result.setSuccess(true);
                result.setMessage("删除手工脱敏运行详情表成功.");
            } else {
                result.setSuccess(false);
                result.setMessage("删除手工脱敏运行详情表失败!");
            }
            return result;
        } catch (Exception e) {
            result.setSuccess(false);
            result.setMessage("删除手工脱敏运行详情表过程中出现异常啦: " + e.getMessage());
            return result;
        }
    }
	
	/**
     * 批量删除手工脱敏运行详情表
     *
     * @param ids
     * @return
     */
    @DeleteMapping(value = "/deleteBatchOpersscTabdetail")
    public Result<OpersscTabdetail> deleteBatchOpersscTabdetail(@RequestParam(name = "ids", required = true) String ids,
                                                                @RequestParam(name = "fdSscid", required = true) String fdSscid,
                                                                @RequestParam(name = "fdTableId", required = true) String fdTableId,
                                                                HttpServletRequest req) {

        Result<OpersscTabdetail> result = new Result<OpersscTabdetail>();
        if (ids == null || "".equals(ids.trim())) {
            result.error500("参数不识别！");
        } else {
            this.opersscTabdetailService.removeByIds(Arrays.asList(ids.split(",")));
            OpersscFiddetail opersscFiddetail = new OpersscFiddetail();
            opersscFiddetail.setFdSscid(fdSscid);
            opersscFiddetail.setFdTableId(fdTableId);
            QueryWrapper< OpersscFiddetail> queryWrapper = QueryGenerator.initQueryWrapper(opersscFiddetail, req.getParameterMap());
            iOpersscFiddetailService.remove(queryWrapper);
            result.success("删除成功!");
        }


        return result;
    }
    

    /**
     * 导出excel
     *
     * @param request
     * @param response
     */
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(OpersscTp opersscTpQuery,HttpServletRequest request, HttpServletResponse response) {
        // Step.1 组装查询条件
        QueryWrapper<OpersscTp> queryWrapper = QueryGenerator.initQueryWrapper(opersscTpQuery, request.getParameterMap());

        //Step.2 AutoPoi 导出Excel
        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
        List<OpersscTpPage> pageList = new ArrayList<OpersscTpPage>();
        List<OpersscTp> opersscTpList = opersscTpService.list(queryWrapper);
        for (OpersscTp opersscTp : opersscTpList) {
            OpersscTpPage vo = new OpersscTpPage();
            BeanUtils.copyProperties(opersscTp, vo);
            List<OpersscTabdetail> opersscTabdetailList = opersscTabdetailService.selectByMainId(opersscTp.getId());
            vo.setOpersscTabdetailList(opersscTabdetailList);
            pageList.add(vo);
        }
        //导出文件名称
        mv.addObject(NormalExcelConstants.FILE_NAME, "手工脱敏表列表");
        mv.addObject(NormalExcelConstants.CLASS, OpersscTpPage.class);
        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("手工脱敏表列表数据", "导出人:Jeecg", "导出信息"));
        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
        return mv;
    }

    /**
     * 通过excel导入数据
     *
     * @param request
     * @param response
     * @return
     */
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
            MultipartFile file = entity.getValue();// 获取上传文件对象
            ImportParams params = new ImportParams();
            params.setTitleRows(2);
            params.setHeadRows(1);
            params.setNeedSave(true);
            try {
                List<OpersscTpPage> list = ExcelImportUtil.importExcel(file.getInputStream(), OpersscTpPage.class, params);
                for (OpersscTpPage page : list) {
                    OpersscTp po = new OpersscTp();
                    BeanUtils.copyProperties(page, po);
                    opersscTpService.saveMain(po, page.getOpersscTabdetailList());
                }
                return Result.ok("文件导入成功！数据行数:" + list.size());
            } catch (Exception e) {
                log.error(e.getMessage(),e);
                return Result.error("文件导入失败:"+e.getMessage());
            } finally {
                try {
                    file.getInputStream().close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return Result.ok("文件导入失败！");
    }
}
